package com.yaozheng.vocationaltraining.utils;

import net.sf.json.JSONArray;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

/**
 * 类型帮助类
 *
 * @author Administrator
 */
public class TypeUtils {
    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name              名称
     * @param defaultJsonObject 默认json
     * @return 返回jsonObject.getJsonObject(name)
     */
    public static JSONObject getJsonObject(JSONObject jsonObject, String name,
                                           JSONObject defaultJsonObject) {
        if (jsonObject == null)
            return defaultJsonObject;
        try {
            if (!jsonObject.containsKey(name)) {
                return defaultJsonObject;
            }
            return jsonObject.getJSONObject(name);
        } catch (JSONException e) {

            return defaultJsonObject;
        }
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param defaultJsonObject 默认JsonObject
     * @param names             多个名称
     * @return jsonObject.getObject(names[i])...
     */
    public static JSONObject getJsonObject(JSONObject jsonObject,
                                           JSONObject defaultJsonObject, String... names) {
        if (names.length == 1)
            return getJsonObject(jsonObject, names[0]);
        JSONObject currJsonObject = jsonObject;
        for (int i = 0; i < names.length; i++) {
            currJsonObject = getJsonObject(currJsonObject, names[i]);
            if (currJsonObject == null)
                return defaultJsonObject;
        }

        return currJsonObject;
    }

    /**
     * 得到JsonObject里面的name
     *
     * @param jsonObject
     * @param names      多个名称
     * @return jsonObject.getObject(names[i])...
     */
    public static JSONObject getJsonObject(JSONObject jsonObject,
                                           String... names) {
        return getJsonObject(jsonObject, null, names);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name       名称
     * @return 返回jsonObject.getJsonObject(name)
     */
    public static JSONObject getJsonObject(JSONObject jsonObject, String name) {
        return getJsonObject(jsonObject, name, null);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name         名称
     * @param defaultValue 默认json
     * @return 返回jsonObject.getString(name)
     */
    public static String getJsonString(JSONObject jsonObject, String name,
                                       String defaultValue) {
        if (jsonObject == null)
            return defaultValue;
        try {
            if (!jsonObject.containsKey(name)) {
                return defaultValue;
            }
            String value = jsonObject.getString(name);
            if (value == null || "".equals(value) || "null".equals(value)) {
                return defaultValue;
            }
            return value;
        } catch (JSONException e) {
            return defaultValue;
        }
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name       名称
     * @return 返回jsonObject.getString(name)
     */
    public static String getJsonString(JSONObject jsonObject, String name) {
        return getJsonString(jsonObject, name, null);

    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name         名称
     * @param defaultValue 默认值
     * @return 返回jsonObject.getInt(name)
     */
    public static int getJsonInteger(JSONObject jsonObject, String name,
                                     int defaultValue) {
        if (jsonObject == null)
            return defaultValue;
        try {
            if (!jsonObject.containsKey(name))
                return defaultValue;
            return jsonObject.getInt(name);
        } catch (Exception e) {
            return defaultValue;
        }

    }

    /**
     * 得到boolean
     *
     * @param jsonObject
     * @param name         名称
     * @param defaultValue 默认值
     * @return 返回jsonObject.getBoolean(name)
     */
    public static boolean getJsonBoolean(JSONObject jsonObject, String name,
                                         boolean defaultValue) {
        if (jsonObject == null)
            return defaultValue;
        try {
            if (!jsonObject.containsKey(name))
                return defaultValue;
            return jsonObject.optBoolean(name);
        } catch (Exception e) {
            return defaultValue;
        }

    }

    /**
     * 得到jsonArray中的一项(boolean)
     *
     * @param jsonArray
     * @param index        下标
     * @param defaultValue 默认值
     * @return 返回jsonArray中的一项
     */
    public static boolean getJsonBoolean(JSONArray jsonArray, int index,
                                         boolean defaultValue) {
        if (jsonArray == null || index == jsonArray.size())
            return defaultValue;
        try {
            return jsonArray.optBoolean(index, defaultValue);

        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 得到jsonArray中的一项(boolean)
     *
     * @param jsonArray
     * @param index        下标
     * @return 返回jsonArray中的一项
     */
    public static boolean getJsonBoolean(JSONArray jsonArray, int index) {
        return getJsonBoolean(jsonArray, index, false);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name         名称
     * @param defaultValue 默认值
     * @return 返回long
     */
    public static long getJsonLong(JSONObject jsonObject, String name,
                                   long defaultValue) {
        if (jsonObject == null)
            return defaultValue;
        try {
            if (!jsonObject.containsKey(name))
                return defaultValue;
            return jsonObject.getLong(name);
        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name
     * @return
     */
    public static long getJsonLong(JSONObject jsonObject, String name) {
        return getJsonLong(jsonObject, name, -1);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name       名称
     * @return 返回jsonObject.getInt(name)
     */
    public static double getJsonDouble(JSONObject jsonObject, String name) {
        return getJsonDouble(jsonObject, name, -1);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name         名称
     * @param defaultValue 默认值
     * @return 返回jsonObject.getInt(name)
     */
    public static double getJsonDouble(JSONObject jsonObject, String name,
                                       double defaultValue) {
        if (jsonObject == null)
            return defaultValue;
        try {
            if (!jsonObject.containsKey(name))
                return defaultValue;
            return jsonObject.getDouble(name);
        } catch (Exception e) {
            return defaultValue;
        }

    }


    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name       名称
     * @return 返回jsonObject.getInt(name)
     */
    public static int getJsonInteger(JSONObject jsonObject, String name) {
        return getJsonInteger(jsonObject, name, -1);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name       名称
     * @return 返回jsonObject.getInt(name)
     */
    public static boolean getJsonBoolean(JSONObject jsonObject, String name) {
        return getJsonBoolean(jsonObject, name, false);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name             名称
     * @param defaultJsonArray 默认JsonArray
     * @return 返回jsonObject.getJSONArray(name)
     */
    public static JSONArray getJsonArray(JSONObject jsonObject, String name,
                                         JSONArray defaultJsonArray) {
        if (jsonObject == null)
            return defaultJsonArray;
        try {
            if (!jsonObject.containsKey(name))
                return defaultJsonArray;
            return jsonObject.getJSONArray(name);
        } catch (JSONException e) {

            return defaultJsonArray;
        }
    }

    /**
     * 得到JsonObject里面的names
     *
     * @param jsonObject
     * @param defaultJsonArray 默认JsonArray
     * @param names            多个名称
     * @return jsonObject.getObject(names[i])...getJsonArray(names[names.length-1
     *])
     */
    public static JSONArray getJsonArray(JSONObject jsonObject,
                                         JSONArray defaultJsonArray, String... names) {
        if (names.length == 1)
            return getJsonArray(jsonObject, names[0], defaultJsonArray);
        JSONObject currJsonObject = jsonObject;
        for (int i = 0; i < names.length - 1; i++) {
            currJsonObject = getJsonObject(currJsonObject, names[i]);
            if (currJsonObject == null)
                return defaultJsonArray;
        }

        return getJsonArray(currJsonObject, names[names.length - 1],
                defaultJsonArray);

    }

    /**
     * 得到JsonObject里面的names
     *
     * @param jsonObject
     * @param names      多个名称
     * @return jsonObject.getObject(names[i])...getJsonArray(names[names.length-1
     *])
     */
    public static JSONArray getJsonArray(JSONObject jsonObject, String... names) {
        return getJsonArray(jsonObject, null, names);
    }

    /**
     * 得到jsonObject里面的name
     *
     * @param jsonObject
     * @param name       名称
     * @return 返回jsonObject.getJSONArray(name)
     */
    public static JSONArray getJsonArray(JSONObject jsonObject, String name) {
        return getJsonArray(jsonObject, name, null);
    }

    /**
     * 得到jsonObject里面的name
     * @return 返回jsonObject.getJSONArray(name)
     */
    public static JSONArray getJsonArray(JSONArray jsonArray, int index) {
        try {
            if (jsonArray != null) {
                if (jsonArray.size() > index) {
                    return jsonArray.optJSONArray(index);
                }
            }
        } catch (Exception e) {
            return null;
        }
        return null;
    }

    /**
     * 得到jsonArray长度
     *
     * @param jsonArray json数组
     * @return 返回jsonArray长度
     */
    public static int getJsonArraySize(JSONArray jsonArray) {
        if (jsonArray == null)
            return 0;
        return jsonArray.size();

    }

    /**
     * 得到jsonArray长度
     *
     * @param jsonArray   json数组
     * @param defaultSize 默认长度
     * @return 返回jsonArray长度
     */
    public static int getJsonArraySize(JSONArray jsonArray, int
            defaultSize) {
        if (jsonArray == null)
            return 0;
        return jsonArray.size();

    }

    /**
     * 是否相等
     *
     * @param jsonObject
     * @param name1      名称1
     * @param name2      名称2
     * @return 是否相等
     */
    public static boolean isEqualsJsonObjectInt(JSONObject jsonObject,
                                                String name1, String name2) {
        return getJsonInteger(jsonObject, name1) == getJsonInteger(jsonObject,
                name2);
    }

    /**
     * 得到jsonArray中的一项(Integer)
     *
     * @param jsonArray
     * @param index        下标
     * @param defaultValue 默认值
     * @return 返回jsonArray中的一项
     */
    public static int getJsonInteger(JSONArray jsonArray, int index,
                                     int defaultValue) {
        if (jsonArray == null || index == jsonArray.size())
            return defaultValue;
        try {
            return jsonArray.getInt(index);

        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 得到jsonArray中的一项(Integer)
     *
     * @param jsonArray
     * @param index     下标
     * @return 返回jsonArray中的一项
     */
    public static int getJsonInteger(JSONArray jsonArray, int index) {
        return getJsonInteger(jsonArray, index, -1);
    }

    /**
     * 得到jsonArray中的一项(String)
     *
     * @param jsonArray
     * @param index        下标
     * @param defaultValue 默认值
     * @return 返回jsonArray中的一项
     */
    public static String getJsonString(JSONArray jsonArray, int index,
                                       String defaultValue) {
        if (jsonArray == null || index == jsonArray.size())
            return defaultValue;
        try {
            return jsonArray.getString(index);

        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 得到jsonArray中的一项(String)
     *
     * @param jsonArray
     * @param index     下标
     * @return 返回jsonArray中的一项
     */
    public static String getJsonString(JSONArray jsonArray, int index) {
        return getJsonString(jsonArray, index, null);
    }

    /**
     * 得到jsonArray中的一项(JSONObject)
     *
     * @param jsonArray
     * @param index        下标
     * @param defaultValue 默认值
     * @return 返回jsonArray中的一项
     */
    public static JSONObject getJsonObject(JSONArray jsonArray, int index,
                                           JSONObject defaultValue) {
        if (jsonArray == null || index == jsonArray.size())
            return defaultValue;
        try {
            return jsonArray.getJSONObject(index);

        } catch (Exception e) {
            return defaultValue;
        }
    }


    /**
     * 得到jsonArray中的一项(JSONObject)
     *
     * @param jsonArray
     * @param index     下标
     * @return 返回jsonArray中的一项
     */
    public static JSONObject getJsonObject(JSONArray jsonArray, int index) {
        return getJsonObject(jsonArray, index, null);
    }

    /**
     * 得到object在数字的位置
     *
     * @param objectArray
     * @param object
     * @return
     */
    public static int getObjectInArrayIndex(Object[] objectArray, Object object) {
        try {
            if (object == null || objectArray == null || objectArray.length < 1)
                return -1;
            for (int i = 0; i < objectArray.length; i++) {
                if (object.equals(objectArray[i])) {
                    return i;
                }
            }
            return -1;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 得到对象
     *
     * @param objects
     * @param index
     * @param defaultObject
     * @return
     */
    public static Object getObject(Object[] objects, int index,
                                   Object defaultObject) {
        try {
            if (objects.length > index) {
                return objects[index];
            }
        } catch (Exception e) {
            e.printStackTrace();
            return defaultObject;
        }
        return defaultObject;

    }
}
